home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / FWLnkMgr.h < prev    next >
Encoding:
Text File  |  1996-09-17  |  7.9 KB  |  230 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWLnkMgr.h
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:            (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWLNKMGR_H
  11. #define FWLNKMGR_H
  12.  
  13. #ifndef FWLNKDST_H
  14. #include "FWLnkDst.h"
  15. #endif
  16.  
  17. #ifndef FWLNKSRC_H
  18. #include "FWLnkSrc.h"
  19. #endif
  20.  
  21. #ifndef FWPRTDEF_H
  22. #include "FWPrtDef.h"
  23. #endif
  24.  
  25. #ifndef FWSTDDEF_H
  26. #include "FWStdDef.h"
  27. #endif
  28.  
  29. #ifndef FWRUNTYP_H
  30. #include "FWRunTyp.h"
  31. #endif
  32.  
  33. #ifndef FWODTYPS_H
  34. #include "FWODTyps.h"
  35. #endif
  36.  
  37. //========================================================================================
  38. //    Forward Declarations
  39. //========================================================================================
  40.  
  41. class FW_CCloneInfo;
  42. class FW_CPart;
  43. class FW_CPartLinkSourceIterator;
  44. class FW_CPartLinkDestIterator;
  45. class FW_CLinkMgrLinkIterator;
  46. class FW_CPresentation;
  47. class FW_CLinkSource;
  48. class FW_CLinkDestination;
  49. class FW_CString;
  50.  
  51. class ODLinkSource;
  52. class ODLink;
  53. class ODStorageUnit;
  54.  
  55. //========================================================================================
  56. //    class FW_CLinkManager - abstract base class that manages Linking
  57. //========================================================================================
  58.  
  59. class FW_CLinkManager
  60. {
  61.     friend class FW_CPartLinkSourceIterator;
  62.     friend class FW_CPartLinkDestIterator;
  63.     friend class FW_CLinkMgrLinkSourceIterator;
  64.     friend class FW_CLinkMgrLinkDestIterator;
  65.  
  66.   public:
  67.     FW_DECLARE_AUTO(FW_CLinkManager)
  68.  
  69. //----------------------------------------------------------------------------------------
  70. //    Constructors/Destructors
  71. //
  72.   public:
  73.     FW_CLinkManager(Environment* ev, FW_CPart* thePart);
  74.     virtual ~FW_CLinkManager();
  75.  
  76.     void RemoveAllLinks(Environment* ev);
  77.  
  78. //----------------------------------------------------------------------------------------
  79. //    Methods that must be overridden
  80. //
  81.   public:
  82.     virtual FW_CLinkSource*         NewLinkSource(Environment* ev, 
  83.                                                 ODUpdateID updateID, 
  84.                                                 FW_CPresentation* presentation) = 0;
  85.     virtual FW_CLinkDestination*    NewLinkDestination(Environment* ev, 
  86.                                                 ODLink* odLink,
  87.                                                 ODLinkInfo* linkInfo,
  88.                                                 FW_CPresentation* presentation) = 0;
  89.  
  90.     virtual FW_CLinkSource*            DoInternalizeOneSourceLink(Environment* ev, 
  91.                                                 ODStorageUnit* storageUnit,
  92.                                                 ODUpdateID updateID);
  93.     virtual FW_CLinkDestination*    DoInternalizeOneDestLink(Environment* ev, ODStorageUnit* storageUnit,
  94.                                                 ODLink* odLink, ODLinkInfo* linkInfo);
  95.  
  96.     virtual ODValueType            GetSourceLinkFormat(Environment* ev) = 0;
  97.     virtual ODValueType            GetDestLinkFormat(Environment* ev) = 0;
  98.  
  99. //----------------------------------------------------------------------------------------
  100. //    Methods that may be overridden
  101. //
  102.   public:
  103.     virtual ODLinkSource*        CreateLink(Environment* ev, ODByteArray* data);
  104.  
  105.     virtual void                DoChangeLinkStatus(Environment* ev, ODFrame* odFrame);
  106.                                 // formerly named LinkStatusChanged
  107.  
  108.     virtual void                DoUpdateLinks(Environment* ev,
  109.                                               ODFrame* odEmbeddedFrame,
  110.                                               ODUpdateID updateID);
  111.                                 // formerly named EmbeddedFrameUpdated
  112.  
  113.     virtual FW_Boolean            EditInLinkAttempted(Environment* ev, ODFrame* odFrame);
  114.     virtual void                RevealLink(Environment* ev, ODLinkSource* odLinkSource);
  115.  
  116.     virtual FW_Boolean            GetLinkInfoString(Environment* ev, FW_CString& infoString);
  117.  
  118.   protected:
  119.     virtual FW_CLinkDestination* PrivMakeLink(Environment* ev,
  120.                                               ODLink* odLink,
  121.                                               ODPasteAsResult& pasteAsResult,
  122.                                               FW_CPresentation* presentation);
  123.  
  124. //----------------------------------------------------------------------------------------
  125. //    Methods that cannot be overridden
  126. //
  127.   public:
  128.     FW_CLinkDestination*        PasteWithLink(Environment* ev, ODStorageUnit* storageUnit, 
  129.                                               ODPasteAsResult& pasteAsResult,
  130.                                               FW_CFrame* frame,
  131.                                               FW_StorageKinds storageKind);
  132.  
  133.     void                        BreakSourceLink(Environment* ev, FW_CLinkSource* linkSource);
  134.     void                        BreakDestinationLink(Environment* ev, FW_CLinkDestination* linkDest);
  135.  
  136.     void                        RestoreSourceLink(Environment* ev, FW_CLinkSource* linkSource);
  137.     void                        RestoreDestinationLink(Environment* ev, FW_CLinkDestination* linkDest);
  138.  
  139.     void                        ExternalizeLinks(Environment* ev, ODStorageUnit* su,
  140.                                                  FW_CCloneInfo* cloneInfo);
  141.     void                        InternalizeLinks(Environment* ev, ODStorageUnit* storageUnit);
  142.  
  143.     void                        InternalizeSourceLink(Environment* ev, ODID linkID,
  144.                                                     ODStorageUnit* storageUnit);
  145.     void                        InternalizeDestLink(Environment* ev, ODID linkID,
  146.                                                     ODStorageUnit* storageUnit);
  147.  
  148.     void                        RegisterLinks(Environment* ev);
  149.  
  150.     FW_CLink*                    GetSelectedLink(Environment* ev);
  151.     void                        SelectLink(Environment* ev, FW_CLink* link);
  152.     FW_Boolean                    ShowLinkInfo(Environment* ev, FW_CFrame* frame);
  153.  
  154.     FW_Boolean                    EditInLinkAlert(Environment* ev, FW_CLinkDestination* linkDest, FW_CFrame* frame);
  155.  
  156.   private:
  157.     void                        PrivInternalizeOneSourceLink(Environment* ev, ODStorageUnit* storageUnit);
  158.     void                        PrivInternalizeOneDestLink(Environment* ev, ODStorageUnit* storageUnit);
  159.  
  160.     void                        PrivShowLinkSource(Environment* ev, FW_CLinkDestination* link);
  161.     short                        PrivShowEditInLinkAlert(Environment* ev);
  162.  
  163. //----------------------------------------------------------------------------------------
  164. //    Utility methods
  165. //
  166.   public:
  167.     FW_CLinkSource*                GetPendingClipboardLink(Environment* ev) const;
  168.     void                        SetPendingClipboardLink(Environment* ev, FW_CLinkSource* linkSource);
  169.     void                        DeletePendingClipboardLink(Environment* ev);
  170.  
  171.     void                        AddToSourceLinkList(Environment* ev, FW_CLinkSource* linkSource);
  172.     void                        RemoveFromSourceLinkList(Environment* ev, FW_CLinkSource* linkSource);
  173.  
  174.     void                        AddToDestLinkList(Environment* ev, FW_CLinkDestination* linkDest);
  175.     void                        RemoveFromDestLinkList(Environment* ev, FW_CLinkDestination* linkDest);
  176.  
  177.     unsigned long                CountSourceLinks(Environment* ev) const;
  178.     unsigned long                CountDestinationLinks(Environment* ev) const;
  179.  
  180.     FW_CLinkSource*                ODtoFWLinkSource(Environment* ev, ODLinkSource* odLinkSource) const;
  181.     FW_CLinkDestination*        ODtoFWLink(Environment* ev, ODLink* odLink) const;
  182.  
  183.     FW_CLinkSource*                GetPendingDropLink(Environment* ev) const;
  184.     void                         PrivSetPendingDropLink(Environment* ev, FW_CLinkSource* linkSource, FW_CFrame* scopeFrame = NULL);
  185.  
  186. //----------------------------------------------------------------------------------------
  187. //    Data Members
  188. //
  189.   protected:
  190.     FW_CPart*                    fPart; 
  191.     FW_CLinkSource*                fPendingClipboardLink;
  192.  
  193.   private:
  194.     FW_CLinkSource*                fPendingDropLink;
  195.     FW_TOrderedCollection<FW_CLinkSource>*        fSourceLinkList;
  196.     FW_TOrderedCollection<FW_CLinkDestination>*    fDestLinkList;
  197. };
  198.  
  199.  
  200. //========================================================================================
  201. //    Inlines
  202. //========================================================================================
  203.  
  204. //----------------------------------------------------------------------------------------
  205. //    FW_CLinkManager::GetPendingClipboardLink
  206. //----------------------------------------------------------------------------------------
  207. inline FW_CLinkSource* FW_CLinkManager::GetPendingClipboardLink(Environment*) const
  208. {
  209.     return fPendingClipboardLink;
  210. }
  211.  
  212. //----------------------------------------------------------------------------------------
  213. //    FW_CLinkManager::SetPendingClipboardLink
  214. //----------------------------------------------------------------------------------------
  215. inline void FW_CLinkManager::SetPendingClipboardLink(Environment*, FW_CLinkSource* linkSource)
  216. {
  217.     fPendingClipboardLink = linkSource;
  218. }
  219.  
  220. //----------------------------------------------------------------------------------------
  221. //    FW_CLinkManager::GetPendingDropLink
  222. //----------------------------------------------------------------------------------------
  223. inline FW_CLinkSource* FW_CLinkManager::GetPendingDropLink(Environment*) const
  224. {
  225.     return fPendingDropLink;
  226. }
  227.  
  228.  
  229. #endif
  230.